Skip to content

chore: merge main into next - #3664

Open
christianhg wants to merge 48 commits into
nextfrom
sync/main-into-next
Open

christianhg wants to merge 48 commits into
nextfrom
sync/main-into-next

Conversation

@christianhg

@christianhg christianhg commented Nov 12, 2026 •

Copy link
Copy Markdown
Member

Brings main into next: the removal of the markdown package and the bump of the playground and doc examples to @portabletext/markdown ^2.9.4. Next already had its own copy of the removal. Both copies re-padded the same table in skills/portable-text-editor/SKILL.md differently, so that merge conflicted and resolves to next's version of the file, which has the same content. The bump merges cleanly.


Note

Medium Risk
Editor sync, normalization, and a major @portabletext/repair API change affect document shape and patch streams; Android CI changes are mostly observability but touch runtime timeouts.

Overview
Brings main into next (including the markdown package removal and bumping @portabletext/markdown to ^2.9.4 in doc-examples and playground) alongside substantive editor and tooling changes.

Portable Text editor and repair: Invalid array entries (strings, numbers, booleans, non-empty arrays, etc.) are now removed with unset patches instead of being coerced into blocks. @portabletext/repair adds a breaking non-object rule and documents unset alongside set. Invalid-value resolutions use an indexOffset so fixes target the real block index. Block objects keep their own children field—only text blocks treat children as the span array—so galleries/callouts with arrayField: 'children' sync, render, patch, move, paste, and undo correctly. Normalization applies structural unset patches and avoids re-queuing removed paths.

Android IME / CI: The host sampler records emulator freezes (thread dumps, optional kernel stacks) and job summaries can report freeze times. uiautomator2 jar cache paths move under packages/editor/node_modules/.cache/thumbjar/. Japanese device tests distinguish Space-committed vs candidate-tapped words when asserting kanji. thumbjar stage timeouts and Node guards are documented and exercised; freeze/sampler behavior gets extensive Linux integration tests.

Reviewed by Cursor Bugbot for commit 3fec37b. Bugbot is set up for automated code reviews on this repo. Configure here.

@vercel

vercel Bot commented Nov 12, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
portable-text-editor-documentation Ready Ready Preview Nov 13, 2026 8:32am UTC
portable-text-example-basic Ready Ready Preview Nov 13, 2026 8:32am UTC
portable-text-playground Ready Ready Preview Nov 13, 2026 8:32am UTC

Request Review

@vercel
vercel Bot temporarily deployed to Preview – portable-text-editor-documentation November 12, 2026 09:51 Inactive
@vercel
vercel Bot temporarily deployed to Preview – portable-text-playground November 12, 2026 09:51 Inactive
@changeset-bot

changeset-bot Bot commented Nov 12, 2026 •

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 3fec37b

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 15 packages
Name Type
@portabletext/editor Patch
@portabletext/repair Major
@portabletext/plugin-character-pair-decorator Patch
@portabletext/plugin-decorations Patch
@portabletext/plugin-dnd Patch
@portabletext/plugin-emoji-picker Patch
@portabletext/plugin-input-rule Patch
@portabletext/plugin-list-index Patch
@portabletext/plugin-markdown-shortcuts Patch
@portabletext/plugin-one-line Patch
@portabletext/plugin-paste-link Patch
@portabletext/plugin-table Patch
@portabletext/plugin-typeahead-picker Patch
@portabletext/plugin-typography Patch
@portabletext/toolbar Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@github-actions

github-actions Bot commented Nov 12, 2026 •

Copy link
Copy Markdown
Contributor

Bundle Stats

✅ No significant changes.

All scenario measurements (34)

🗺️ @portabletext/block-tools / @portabletext/block-tools · @portabletext/block-tools / @portabletext/block-tools/rules · @portabletext/editor / @portabletext/editor · @portabletext/editor / @portabletext/editor/behaviors · @portabletext/editor / @portabletext/editor/plugins · @portabletext/editor / @portabletext/editor/selectors · @portabletext/editor / @portabletext/editor/traversal · @portabletext/editor / @portabletext/editor/utils · @portabletext/editor / defineSchema · @portabletext/editor / useEditor · @portabletext/editor / typical · @portabletext/html / @portabletext/html · @portabletext/html / @portabletext/html/rules · @portabletext/html / htmlToPortableText · @portabletext/keyboard-shortcuts / @portabletext/keyboard-shortcuts · @portabletext/patches / @portabletext/patches · @portabletext/repair / @portabletext/repair · @portabletext/sanity-bridge / @portabletext/sanity-bridge · @portabletext/schema / @portabletext/schema · @portabletext/plugin-character-pair-decorator / @portabletext/plugin-character-pair-decorator · @portabletext/plugin-decorations / @portabletext/plugin-decorations · @portabletext/plugin-dnd / @portabletext/plugin-dnd · @portabletext/plugin-emoji-picker / @portabletext/plugin-emoji-picker · @portabletext/plugin-input-rule / @portabletext/plugin-input-rule · @portabletext/plugin-list-index / @portabletext/plugin-list-index · @portabletext/plugin-markdown-shortcuts / @portabletext/plugin-markdown-shortcuts · @portabletext/plugin-one-line / @portabletext/plugin-one-line · @portabletext/plugin-paste-link / @portabletext/plugin-paste-link · @portabletext/plugin-typeahead-picker / @portabletext/plugin-typeahead-picker · @portabletext/plugin-typography / @portabletext/plugin-typography · @portabletext/toolbar / @portabletext/toolbar · @portabletext/toolbar / typical · @portabletext/plugin-table / @portabletext/plugin-table · @portabletext/plugin-table / @portabletext/plugin-table/ui · Artifacts

Scenario Kind Bundle (raw / gzip) Gzip change Import time Import change
⚪ @portabletext/block-tools / @portabletext/block-tools export 91.8 KB / 12.9 KB None 13 ms -0 ms, -0.7%
⚪ @portabletext/block-tools / @portabletext/block-tools/rules export 15.2 KB / 2.1 KB None 5 ms -0 ms, -1.5%
⚪ @portabletext/editor / @portabletext/editor export 1.05 MB / 133.8 KB +1023 B, +0.8% 70 ms +0 ms, +0.5%
⚪ @portabletext/editor / @portabletext/editor/behaviors export 4.3 KB / 147 B None 2 ms +0 ms, +1.1%
⚪ @portabletext/editor / @portabletext/editor/plugins export 5.1 KB / 645 B None 7 ms +0 ms, +0.5%
⚪ @portabletext/editor / @portabletext/editor/selectors export 101.1 KB / 10.1 KB +2 B, +0.0% 12 ms -0 ms, -0.7%
⚪ @portabletext/editor / @portabletext/editor/traversal export 50.9 KB / 4.9 KB None 6 ms +0 ms, +3.9%
⚪ @portabletext/editor / @portabletext/editor/utils export 37.1 KB / 4.7 KB -1 B, -0.0% 6 ms -0 ms, -0.7%
⚪ @portabletext/editor / defineSchema consumer 658 B / 69 B None None None
⚪ @portabletext/editor / typical consumer 1.04 MB / 133.5 KB +985 B, +0.7% None None
⚪ @portabletext/editor / useEditor consumer 1.6 KB / 248 B None None None
⚪ @portabletext/html / @portabletext/html export 69.3 KB / 10.1 KB None 7 ms +0 ms, +1.4%
⚪ @portabletext/html / @portabletext/html/rules export 15.2 KB / 2.1 KB None 4 ms -0 ms, -3.5%
⚪ @portabletext/html / htmlToPortableText consumer 69.3 KB / 10.1 KB None None None
⚪ @portabletext/keyboard-shortcuts / @portabletext/keyboard-shortcuts export 7.0 KB / 858 B None 2 ms -0 ms, -0.8%
⚪ @portabletext/patches / @portabletext/patches export 50.0 KB / 7.7 KB None 4 ms -0 ms, -3.0%
⚪ @portabletext/plugin-character-pair-decorator / @portabletext/plugin-character-pair-decorator export 124.1 KB / 15.8 KB None None None
⚪ @portabletext/plugin-decorations / @portabletext/plugin-decorations export 16.4 KB / 2.3 KB None None None
⚪ @portabletext/plugin-dnd / @portabletext/plugin-dnd export 10.4 KB / 1.8 KB None None None
⚪ @portabletext/plugin-emoji-picker / @portabletext/plugin-emoji-picker export 150.1 KB / 18.6 KB None None None
⚪ @portabletext/plugin-input-rule / @portabletext/plugin-input-rule export 124.2 KB / 15.8 KB None None None
⚪ @portabletext/plugin-list-index / @portabletext/plugin-list-index export 7.5 KB / 1.2 KB None None None
⚪ @portabletext/plugin-markdown-shortcuts / @portabletext/plugin-markdown-shortcuts export 136.4 KB / 17.6 KB None None None
⚪ @portabletext/plugin-one-line / @portabletext/plugin-one-line export 2.6 KB / 608 B None None None
⚪ @portabletext/plugin-paste-link / @portabletext/plugin-paste-link export 4.3 KB / 1.0 KB None None None
⚪ @portabletext/plugin-table / @portabletext/plugin-table export 61.1 KB / 7.1 KB None None None
⚪ @portabletext/plugin-table / @portabletext/plugin-table/ui export 114.6 KB / 19.5 KB None None None
⚪ @portabletext/plugin-typeahead-picker / @portabletext/plugin-typeahead-picker export 166.2 KB / 19.9 KB None None None
⚪ @portabletext/plugin-typography / @portabletext/plugin-typography export 131.1 KB / 17.0 KB None None None
⚪ @portabletext/repair / @portabletext/repair export 4.8 KB / 704 B +68 B, +10.7% 3 ms +0 ms, +0.6%
⚪ @portabletext/sanity-bridge / @portabletext/sanity-bridge export 27.0 KB / 3.0 KB None 4 ms -0 ms, -0.1%
⚪ @portabletext/schema / @portabletext/schema export 9.9 KB / 1.2 KB None 2 ms -0 ms, -1.7%
⚪ @portabletext/toolbar / @portabletext/toolbar export 153.3 KB / 17.3 KB None None None
⚪ @portabletext/toolbar / typical consumer 145.6 KB / 16.9 KB None None None

Significant means at least 1.0 KB and 1% gzip, or at least 5 ms and 10% import time.

@vercel
vercel Bot temporarily deployed to Preview – portable-text-editor-documentation November 12, 2026 10:14 Inactive
@socket-security

socket-security Bot commented Nov 12, 2026 •

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Addedfind-cache-directory@​6.0.01001009879100
Updated@​portabletext/​markdown@​2.9.3 ⏵ 2.9.4100100100100100

View full report

An `insert.break` mid-span in a three-span block splits the block and
makes the moved spans reappear under their original keys in the new
block, the shape the interpreter's key-reappearance oracle sweeps.
No existing capture covers it. The snapshot is the fixture; consumers
read `__fixtures__/wire-catalogue/block-split-multi-span.json`.

`@portabletext/steps` reads the shared catalogue across packages for
conformance and cannot regenerate captures itself (regeneration needs
`createTestEditor`), so the scenario lands editor-side.
`applyStructuralCorrection` accepted only `set` patches. When repair
returned an `unset` for a non-object array entry, normalization threw
before it could remove the entry.

Apply `unset` corrections through the editor operation pipeline. Removed
paths are not re-queued because the numeric path would resolve to the
next sibling after removal. Each removed entry emits one local positional
`unset`; `null` entries keep their existing editor behavior.
The single-block array passed by `syncBlock` made root numeric paths
and missing-key descriptions identify index zero for every entry.
Accepting a resolution could therefore remove or overwrite the first
block instead of repairing the invalid entry.

Pass the incoming value index as an optional `validateValue` offset.
Root numeric paths, descriptions, and translation values now use that
position. Keyed paths and child indices remain unchanged, preserving
local application of auto-resolutions to the single-block array.
Pin sustained abnormal samples, recovery and retry isolation in the
host evidence fixtures. Exercise a stopped process with failing sudo
under `errexit` and `pipefail`, including its second thread capture
at least 30 seconds later and the subsequent exit record.

The original scripts fail all five new regression cases.
The host sampler recorded qemu's process state but no thread evidence
before a loss. Two consecutive samples outside `S` and `R` now capture
each task's name, state and wait channel, with a privileged kernel stack
when available. Bound each stack read and ignore capture failures.
Capture once more after 30 seconds if the process is still abnormal,
with at most two captures per tracked process.

Append the first abnormal sample's UTC time to an exit's host evidence
when its final abnormal streak contains at least two samples. Recovery
and a previous emulator's exit cannot carry a freeze into that result.
Document the new artifacts without changing the workflow or run result.

This branch was successfully deployed

3 active deployments
Preview – portable-text-editor-documentation — 3fec37b0 Deployed Nov 13, 2026 by vercel[bot]
Preview – portable-text-playground — 3fec37b0 Deployed Nov 13, 2026 by vercel[bot]
Preview – portable-text-example-basic — 3fec37b0 Deployed Nov 13, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant